"""
Base preprocessor interface for the data preprocessing pipeline.

This module defines the abstract base class that all preprocessing methods must implement
to ensure a unified interface across the system.
"""

from abc import ABC, abstractmethod
import pandas as pd


class PreprocessorInterface(ABC):
    """
    Abstract base class for all preprocessing methods.
    
    This interface ensures that all preprocessing methods follow a consistent
    pattern and can be used interchangeably within the processing pipeline.
    """
    
    @abstractmethod
    def process(self, data: pd.DataFrame) -> pd.DataFrame:
        """
        Apply preprocessing to the input data.
        
        Args:
            data (pd.DataFrame): Input DataFrame to be processed
            
        Returns:
            pd.DataFrame: Processed DataFrame
            
        Raises:
            Exception: If preprocessing fails
        """
        pass
    
    @abstractmethod
    def get_name(self) -> str:
        """
        Return human-readable name for this preprocessor.
        
        Returns:
            str: Human-readable name of the preprocessing method
        """
        pass
    
    @abstractmethod
    def get_id(self) -> int:
        """
        Return unique identifier for this preprocessor.
        
        Returns:
            int: Unique integer identifier for this preprocessing method
        """
        pass